package com.mc.read.common.util;

/**
 * @Author:LiuHao
 * @Date: Create in 17:25 2017/10/16
 **/


import com.alibaba.fastjson.JSON;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.mc.read.common.emun.ServiceCodeEnum;
import com.mc.read.common.exception.ServiceException;

import java.util.Random;


/**

 * 短信发送工具

 * @author Administrator

 *

 */
public class SmsUtil {
    //产品名称:云通信短信API产品,开发者无需替换

    static final String product = "Dysmsapi";
    //产品域名,开发者无需替换

    static final String domain = "dysmsapi.aliyuncs.com";

    // TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)


static final String accessKeyId = "LTAI0b3xL1BpjE0j";
    static final String accessKeySecret = "4T0Fc1KU1z33CDb3wtFqfM5f636Ay5";
    //注册
        public static SendSmsResponse sendSms(String tel, String code) throws ServiceException {
        SendSmsResponse sendSmsResponse = null;
        try {
            //可自助调整超时时间
            System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
            System.setProperty("sun.net.client.defaultReadTimeout", "10000");

            //初始化acsClient,暂不支持region化
            IClientProfile profile = DefaultProfile.getProfile("sms.topic-cn-hangzhou", accessKeyId, accessKeySecret);
            DefaultProfile.addEndpoint("sms.topic-cn-hangzhou", "sms.topic-cn-hangzhou", product, domain);
            IAcsClient acsClient = new DefaultAcsClient(profile);

            //组装请求对象-具体描述见控制台-文档部分内容
            SendSmsRequest request = new SendSmsRequest();
            //必填:待发送手机号
            request.setPhoneNumbers(tel);
            //必填:短信签名-可在短信控制台中找到
            request.setSignName("书来");
            //必填:短信模板-可在短信控制台中找到
//            request.setTemplateCode("SMS_110180006");
            request.setTemplateCode("SMS_167365218");
            //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
            request.setTemplateParam("{\"code\":"+code+"}");

            //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
            //request.setSmsUpExtendCode("90997");

            //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
            request.setOutId("yourOutId");

            //hint 此处可能会抛出异常，注意catch
            sendSmsResponse = acsClient.getAcsResponse(request);
            if(sendSmsResponse.getCode().equals("isv.BUSINESS_LIMIT_CONTROL")){
                throw new ServiceException(202090,"请注意短信发送频率，支持1条/分钟，5条/小时，累计10条/天 ");
            }else if(!sendSmsResponse.getCode().equals("OK")){
                throw new ServiceException(ServiceCodeEnum.SMS_IS_FAIL);
            }
        } catch (ServiceException e){
            throw new ServiceException(e.getcode(),e.getMessage());
        }  catch (Exception e) {
            e.printStackTrace();
            throw new ServiceException(ServiceCodeEnum.SMS_IS_FAIL);
        }

        return sendSmsResponse;
    }
    //TODO 短信模板 尚未通过
    public static SendSmsResponse sendSmsForRegSuccess(String tel, String code) throws ServiceException {
        SendSmsResponse sendSmsResponse = null;
        try {
            //可自助调整超时时间
            System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
            System.setProperty("sun.net.client.defaultReadTimeout", "10000");

            //初始化acsClient,暂不支持region化
            IClientProfile profile = DefaultProfile.getProfile("sms.topic-cn-hangzhou", accessKeyId, accessKeySecret);
            DefaultProfile.addEndpoint("sms.topic-cn-hangzhou", "sms.topic-cn-hangzhou", product, domain);
            IAcsClient acsClient = new DefaultAcsClient(profile);

            //组装请求对象-具体描述见控制台-文档部分内容
            SendSmsRequest request = new SendSmsRequest();
            //必填:待发送手机号
            request.setPhoneNumbers(tel);
            //必填:短信签名-可在短信控制台中找到
            request.setSignName("书来");
            //必填:短信模板-可在短信控制台中找到
//            request.setTemplateCode("SMS_110180006");
            request.setTemplateCode("SMS_167400162");
            //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
            request.setTemplateParam("{\"code\":"+code+"}");

            //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
            //request.setSmsUpExtendCode("90997");

            //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
            request.setOutId("yourOutId");

            //hint 此处可能会抛出异常，注意catch
            sendSmsResponse = acsClient.getAcsResponse(request);
            System.out.println(JSON.toJSONString(sendSmsResponse));
            if(sendSmsResponse.getCode().equals("isv.BUSINESS_LIMIT_CONTROL")){
                throw new ServiceException(202090,"请注意短信发送频率，支持1条/分钟，5条/小时，累计10条/天 ");
            }else if(!sendSmsResponse.getCode().equals("OK")){

                throw new ServiceException(ServiceCodeEnum.SMS_IS_FAIL);
            }
        } catch (ServiceException e){
            e.printStackTrace();
            throw new ServiceException(e.getcode(),e.getMessage());
        }  catch (Exception e) {
            e.printStackTrace();
            throw new ServiceException(ServiceCodeEnum.SMS_IS_FAIL);
        }

        return sendSmsResponse;
    }

    /**

     * 获取验证码方法

     */
    static int max=10000;
    static int min=1000;
    public static String getCode(){
        Random random = new Random();
        int code = random.nextInt(max)%(max-min+1) + min;
//        int code = (int)(Math.random()*9999)+1;  //每次调用生成一次四位数的随机数
//        while (code>=10000||code<1000){
//            code = random.nextInt(max)%(max-min+1) + min;
//        }
        return code+"";
    }

    public static void main(String[] args) {

    }

}
